Micron Document
Fox's Git Mirrors


Displaying Raw • Download

examples/wasm/vendor/github.com/dunglas/httpsfv/item.go 633735d797cc5f5d48cb2e22e8fd7cd743930daf (633735d7) Text, 1.24 KB

package httpsfv

import (
"strings"
)

// Item is a bare value and associated parameters.
// See https://httpwg.org/specs/rfc9651.html#item.
type Item struct {
Value interface{}
Params *Params
}

// NewItem returns a new Item.
func NewItem(v interface{}) Item {
assertBareItem(v)

return Item{v, NewParams()}
}

func (i Item) member() {
}

// marshalSFV serializes as defined in
// https://httpwg.org/specs/rfc9651.html#ser-item.
func (i Item) marshalSFV(b *strings.Builder) error {
if i.Value == nil {
return ErrInvalidBareItem
}

if err := marshalBareItem(b, i.Value); err != nil {
return err
}

return i.Params.marshalSFV(b)
}

// UnmarshalItem parses an item as defined in
// https://httpwg.org/specs/rfc9651.html#parse-item.
func UnmarshalItem(v []string) (Item, error) {
s := &scanner{
data: strings.Join(v, ","),
}

s.scanWhileSp()

sfv, err := parseItem(s)
if err != nil {
return Item{}, err
}

s.scanWhileSp()

if !s.eof() {
return Item{}, &UnmarshalError{off: s.off}
}

return sfv, nil
}

func parseItem(s *scanner) (Item, error) {
bi, err := parseBareItem(s)
if err != nil {
return Item{}, err
}

p, err := parseParams(s)
if err != nil {
return Item{}, err
}

return Item{bi, p}, nil
}

Served by rngit 1.5.2 - Generated in 0.02s